package DA;

import BO.Concepto;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author Chino
 */
public class BDConnection {

   String conexionString ="jdbc:sqlserver://localhost:1433;" +
            "databaseName=Viaticos;user=sa; password=admin;";           


    
    Connection con = null;
    PreparedStatement pstmt = null;
    Statement stmt= null;
    ResultSet rs = null;  
    
    
    public Connection GetConnection() {
        Connection conexion = null;

        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String url = "jdbc:sqlserver://localhost;databaseName=Viaticos;user=sa;password=admin;";
            conexion = DriverManager.getConnection(url);
        } catch (ClassNotFoundException ex) {
            JOptionPane.showMessageDialog(null, ex, "Error1 en la Conexión con la BD " + ex.getMessage(), JOptionPane.ERROR_MESSAGE);
            conexion = null;
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex, "Error2 en la Conexión con la BD " + ex.getMessage(), JOptionPane.ERROR_MESSAGE);
            conexion = null;
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex, "Error3 en la Conexión con la BD " + ex.getMessage(), JOptionPane.ERROR_MESSAGE);
            conexion = null;
        } finally {
            return conexion;
        }
        
    }

    public Concepto BuscarConcepto(int ID) {
        //To change body of generated methods, choose Tools | Templates.
        return null;
    }

    public int validar(String cuenta, String contraseña) {
        Connection con = GetConnection();
        String consulta = "SELECT nombreUsuario FROM dbo.Usuario Where nombreUsuario ='" + cuenta + "' AND contraseña = '" + contraseña + "' ";
        try {
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(consulta);
            while (rs.next()) {
                String cuentaUsuario = rs.getString("nombreUsuario");
                System.out.println(cuentaUsuario + "\n");
                return 1;
            }

        } catch (SQLException ex) {
            Utils.Bitacora("DataBase", "AbrirConexion()", ex, Utils.NivelBitacora.Error);
        }
        return 0;
    }

    public void AgregarConcepto(int ID, String Descripcion, Double Monto)
            throws SQLException {
        Connection con = null;
        CallableStatement proc = null;

        try {
            con = GetConnection();
            proc = con.prepareCall("{ call INSCONCEPTO(?, ?, ?) }");
            proc.setInt(1, ID);
            proc.setString(2, Descripcion);
            proc.setDouble(3, Monto);
            proc.execute();
        } finally {
            try {
                proc.close();
            } catch (SQLException e) {
            }
            con.close();
        }
    }

    public void ModificarConcepto(String ID, String Descripcion, Double Monto) throws SQLException {
        try {   
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        con = DriverManager.getConnection(conexionString);
        String SQL = "update Concepto set DescripcionConcepto = ?, Monto = ? Where IdConcepto = '"+ID+"';";
        pstmt = con.prepareStatement(SQL);
        pstmt.setString(1, Descripcion);
        pstmt.setDouble(2, Monto);
        pstmt.executeUpdate();
    } catch (ClassNotFoundException ex) {
        Logger.getLogger(DAFuncionarios.class.getName()).log(Level.SEVERE, null, ex);
    }
     finally {
        if (pstmt != null) { pstmt.close(); }
    }  
    }

    public boolean UsuarioDatos(String contrasenaAct, String cedula) {
        Connection con = GetConnection();
        String consulta = "SELECT contraseña FROM dbo.Usuario Where cedula ='" + cedula + "'";
        String contraseña = "";
        boolean res = false;
        try {
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(consulta);

            while (rs.next()) {
                contraseña = rs.getString("contraseña").trim();
                System.out.println(contraseña + "\n");
            }
            if (contrasenaAct.equals(contraseña) == true) {
                res= true;
            } else {
                res= false;
            }
        } catch (SQLException ex) {
            Utils.Bitacora("DataBase", "UsuarioDatos()", ex, Utils.NivelBitacora.Error);
        }
        return res;

        
    }

    public void ModificarContraseña(String cedula, String contraseñaNueva) {
        Connection con = GetConnection();
        String consulta = "Update dbo.Usuario set contraseña='" + contraseñaNueva + "' WHERE cedula ='" + cedula + "'";
        String contraseña = "";
        try {
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(consulta);

        } catch (SQLException ex) {
            Utils.Bitacora("DataBase", "ModificarContraseña()", ex, Utils.NivelBitacora.Error);
        }

    }

    public void AgregarConcepto(Concepto NuevoConcepto) throws SQLException {
         try {   
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        con = DriverManager.getConnection(conexionString);
        String SQL = "insert into Concepto values (?,?,?);";
        pstmt = con.prepareStatement(SQL);
        pstmt.setString(1, NuevoConcepto.getDescripcionConcepto());
        pstmt.setString(2, NuevoConcepto.getIdConcepto());
        pstmt.setDouble(3, NuevoConcepto.getMonto());
        pstmt.executeUpdate();
    } catch (ClassNotFoundException ex) {
        Logger.getLogger(DAFuncionarios.class.getName()).log(Level.SEVERE, null, ex);
    }
     finally {
        if (pstmt != null) { pstmt.close(); }
    }  
    }
    
    
}
